﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DataAccess;
using System.Linq.Expressions;
using QuanLyKhachSan.Validation;
using QuanLyKhachSan;
using System.Data.Entity;

namespace BLL
{
    public class TaiKhoanManager: IValidator<TaiKhoan>, ILenhThucThi<TaiKhoan>
    {
        public ValidateResult Validate(TaiKhoan obj)
        {
            var vResult = new ValidateResult();
            if (obj.MaNV <= 0)
            {
                vResult.Message.Add("Chưa chọn mã nhân viên!");
            }
            if (obj.Username.Equals(""))
            {
                vResult.Message.Add("Chưa nhập username!");
            }
            if (obj.Password.Equals(""))
            {
                vResult.Message.Add("Chưa nhập password!");
            }
            else
            {
                if (obj.Password.Length < 6)
                {
                    vResult.Message.Add("Password phải có ít nhất 6 kí tự!");
                }
            }
            if (obj.EmailDangKy.Equals(""))
            {
                vResult.Message.Add("Chưa nhập email đăng ký!");
            }
            else
            {
                if (!obj.EmailDangKy.Contains("@"))
                {
                    vResult.Message.Add("Sai định dạng email!");
                }
            }
            if (obj.MaNhom.Equals(""))
            {
                vResult.Message.Add("Chưa chọn mã nhóm!");
            }
            return vResult;
        }

        public ActionResult Them(TaiKhoan obj)
        {
            var actionResult = new ActionResult();
            using (var context = new QLKhachSanContext())
            {
                TaiKhoan tk = context.TaiKhoans.FirstOrDefault(a => a.MaTaiKhoan.Equals(obj.MaTaiKhoan));
                if (tk != null)
                {
                    actionResult.Exceptions.Add(new Exception("Tài khoản này đã tồn tại"));
                }
                else
                {
                    context.TaiKhoans.Add(obj);
                    context.SaveChanges();
                }
            }
            return actionResult;
        }

        public ActionResult CapNhat(TaiKhoan obj)
        {
            var actionResult = new ActionResult();
            using (var context = new QLKhachSanContext())
            {
                var tkUpdate = context.TaiKhoans.Single(t => t.MaTaiKhoan.Equals(obj.MaTaiKhoan));
                try
                {
                    tkUpdate.MaNV = obj.MaNV;
                    tkUpdate.Username = obj.Username;
                    tkUpdate.Password = obj.Password;
                    tkUpdate.PasswordTamThoi = obj.PasswordTamThoi;
                    tkUpdate.EmailDangKy = obj.EmailDangKy;
                    tkUpdate.LanDangNhapCuoi = obj.LanDangNhapCuoi;
                    tkUpdate.TrangThai = obj.TrangThai;
                    tkUpdate.MaNhom = obj.MaNhom;
                    context.Entry(tkUpdate).State = EntityState.Modified;
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    actionResult.Exceptions.Add(ex);
                }
            }
            return actionResult;
        }

        public ActionResultAsList<TaiKhoan> LayDanhSach()
        {
            var actionResult = new ActionResultAsList<TaiKhoan>();
            var context = new QLKhachSanContext();
            actionResult.Result = context.TaiKhoans.Where(tk => tk.TrangThai != null && System.String.Compare(tk.TrangThai, "Da xoa", System.StringComparison.InvariantCultureIgnoreCase) != 0 && System.String.Compare(tk.TrangThai, "Đã xóa", System.StringComparison.InvariantCultureIgnoreCase) != 0).ToList();
            return actionResult;
        }

        public ActionResult Xoa(string ma)
        {
            throw new NotImplementedException();
        }

        public ActionResult Xoa(TaiKhoan obj)
        {
            var actionResult = new ActionResult();
            using (var context = new QLKhachSanContext())
            {
                var que = context.TaiKhoans.Single(tk => tk.MaTaiKhoan.Equals(obj.MaTaiKhoan));
                context.TaiKhoans.Remove(que);
                context.SaveChanges();
            }
            return actionResult;
        }
    }
}
